from estadoFase import EstadoFase, db_session
from sqlalchemy import exc
from flask import flash
session = db_session()

class EstadoFaseManager(object):
    """Clase encargada del manejo de estados de fase"""
    def __init__(self):
        pass
    def __repr__(self):
        return '<EstadoFase Manager>'
    
    def guardarEstadoFase(self, estadoFase):
        """
        Metodo encargado de almacenar un estado de fase en la base de datos
        @param estadoFase: Objeto estado fase que se desea guardar.
        """
        session.add(estadoFase)
        try:
            session.commit()
        except exc.IntegrityError as ex:
            session.rollback()
            return flash("El estado ya existe", "error")
        else:
            return flash("Estado de fase registrada exitosamente")
#        session.close()
        
    def eliminarEstadoFase(self, idestadofase):
        """
        Metodo encargado de eliminar un estado de fase de la base de datos
        @param idestadofase: id del estado fase que se desea eliminar.
        """
#        session = db_session()
        estadoFase = session.query(EstadoFase).filter(EstadoFase.idestadofase == idestadofase).first()
        session.delete(estadoFase)
        session.commit()
        
    def getEstadoFase(self, idestadofase):
        """
        Metodo encargado de retornar estado de fase dado su idestado
        @param idestadofase: id del estado fase que se desea obtener. 
        """
        estadoFase = session.query(EstadoFase).filter(EstadoFase.idestadofase == idestadofase).first()
        return estadoFase
    
    def getEstadoFases(self):
        """Metodo encargado de retornar todos los estados de fase"""
        estadoFases = session.query(EstadoFase)
        return estadoFases
    
    def getEstadoFaseFiltradoPorNombre(self, nombre):
        """
        Metodo encargado de retornar un estado de fase dado su nombre
        @param nombre: nombre del estado fase que se desea obtener.
        """
        if nombre == "":
            nombre = "%"
        else:
            nombre = "%" + nombre + "%"
        estadoFase = session.query(EstadoFase).filter(EstadoFase.nombre.like(nombre))
        return estadoFase
    
    def getEstadoFasePorNombre(self, nombre):
        """
        Metodo encargado de retornar un estado de fase dado su nombre
        @param nombre: nombre del estado fase que se desea obtener.
        """
        estadoFase = session.query(EstadoFase).filter(EstadoFase.nombre == nombre).first()
        return estadoFase
    